package com.translate.web.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.dao.base.IBaseMapper;
import com.translate.entity.TeamAssoc;
import com.translate.entity.TeamInfo;
import com.translate.entity.User;

public interface UserMapper extends IBaseMapper<User>{

    int insertSelective(User record);

    User selectByPrimaryKey(Integer id);
    
    /**
     * 统计团队数量和申请数量
     * @param teamId
     * @return
     */
    List<TeamInfo> groupNumAndApplyNum(int teamId);

    
    /**
     * 获取用户ids
     * @return
     */
    List<User> getUserIdsBySearchName(String userName);
    
   
    /**
     * 根据电话号码获取用户信息
     * @param mobilePhone
     * @return
     */
    User getUserByMobile(@Param("mobilePhone") String mobilePhone);
    
    User loginByMobile(@Param("mobilePhone") String mobilePhone);
    
    List<User> getUserIdsByRealname(String realname);
    
    /**
     * 获取顶级通讯录
     * @return
     */
    List<User> topLeavel(int start, int selectCount);
    
    /**
     * 获取部门通讯列表
     * @param deptId
     * @return
     */
    <S> List<User> departmentCommunications(S param);
    
    /**
     * 
     * @param <S>
     * @param param
     * @return
     */
    <S> Integer countByDepartmentCommunications(S param);
    
    /**
     * 搜索添加团队成员
     * @param <P>
     * @param param
     * @return
     */
    <P> User searchTeamMember(P param);
    
    /**
     * 通讯录搜索
     * @param <S>
     * @param param
     * @return
     */
    <S> List<User> departmentCommunicationsBySearch(S param);
    
    /**
     * 根据手机号更新密码
     * @param mobilePhone
     * @param pwd
     * @return
     */
    int updatePwdByMobilePhone(@Param("mobilePhone") String mobilePhone, @Param("pwd") String pwd);
    
    /**
     * 通过
     * @param <P>
     * @param param
     * @return
     */
    <P> int passThrough(P param);
    
    /**
     * 拒绝 加入团队
     * @param <P>
     * @param param
     * @return
     */
    <P> int refuse(P param);
    
    /**
     * 移除成员
     * @param <P>
     * @param param
     * @return
     */
    int removeMemberByTeam(int id);
    
    /**
     * 直接通过
     * @param id
     * @param teamId
     * @return
     */
    int directlyThrough(long id, int teamId, long joinTime);
    
    
    /**
     * 根据邮箱更新密码
     * @param mobilePhone
     * @param pwd
     * @return
     */
    int updatePwdByEmail(@Param("email") String email, @Param("pwd") String pwd);
    
    
    /**
     * 根据推荐码获取用户
     * @param recommend
     * @return
     */
    User getUserByRecommendedCode(Integer recommend);
    
    
    /**
     * 邮箱密码登录
     * @param account
     * @return
     */
    User getUserByEmail( String account);
    
    /**
     * 用户查重券
     * @param account
     * @return
     */
    User selectDuplicateCheckCoupon(int id);
    
    /**
     * 加入团队
     * @param <P>
     * @param parameter
     * @return
     */
    <P> int joinTeam(P parameter);
    
    
    /**
     * 统计团队信息
     * @param <DATA>
     * @param teamId
     * @return
     */
    <DATA> List<DATA> staticsTeamInfo(int teamId);
    
    /**
     * 统计团队成员
     * @param assocIds
     * @return
     */
    List<TeamAssoc> staticesCount(int[] assocIds);
    
    /**
     * 加锁更新
     * @param account
     * @return
     */
    User getUserByEmailForUpdate( String account);

    User queryById(@Param("id") Integer id);

    int updateUser(User user);

    User queryByType(User user);

    User queryByWxOpenId(String openId);

    User queryByPhoneAndOpenId(String phone, String openId);

    User queryByPhone(String phone);

    User queryEmail(String email);
    
    /**
	 * 统计推荐人数
	 * @param recommendId
	 * @return
	 */
	int countRecomendNum(long recommendId);
	

	
}